home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
050
/
windmgr2.arc
/
WINDMNGR.INC
< prev
next >
Wrap
Text File
|
1980-01-01
|
3KB
|
106 lines
{ (C) Jim Everingham, 1985 }
Const MaxScreens=8; { change this to however many windows you will need.}
Screen_seg=$B800;
PageVal =$0000;
type MaxStr = String[80];
windowvals = record
fg,x1,y1,x2,y2,fattr,iattr,cattr,tattr,tt,frm,wind : integer;
txt : Maxstr;
end;
windata = Array[1..4000] of byte;
var val : Array[0..MaxScreens] of windowvals;
Screen : Array[0..MaxScreens] of windata;
Page : windata absolute Screen_Seg:Pageval;
Crt,Winpage,stack_top:Integer;
Procedure Windmngr;External'Windmngr.bin';
Procedure Frame(x_1,y_1,x_2,y_2,f_attr,i_attr,f_rm,_wind,c_flag,p_g:integer);External Windmngr[0];
Procedure Title(t_xt:Maxstr;c_attr,t_attr,x_11,y_11,tt,p_g:integer);External Windmngr[3];
Procedure Mode(md:integer);external Windmngr[6];
Procedure WriteXY(t_xt:Maxstr;I_attr,x_,y_,p_g:integer);External Windmngr[9];
Procedure Initialize;
begin
Crt:=1;
Winpage:=0;
Stack_top:=0;
end;
Procedure SetWindow(Num,x1,y1,x2,y2,fattr,iattr,frm,wind:integer; txt:Maxstr; tattr,cattr,tt:integer);
begin
if num<=MaxScreens then
begin
Val[num].fg:=1;
Val[num].x1:=x1;
Val[num].x2:=x2;
Val[num].y1:=y1;
Val[num].y2:=y2;
Val[num].fattr:=fattr;
Val[num].iattr:=iattr;
Val[num].frm:=frm;
Val[num].wind:=wind;
Val[num].cattr:=cattr;
Val[num].tattr:=tattr;
Val[num].tt:=tt;
Val[num].txt:=txt
end else
Writeln('Only up to ',MaxScreens,' may be defined.')
end;
Procedure Open(Num:integer);
begin
if val[num].fg = 1 then
begin
if stack_top=0 then
begin
Mode(0);
Move(Page,Screen[stack_top],4000);
Mode(1);
Stack_top:=1
end else
begin
Mode(0);
Move(Page,Screen[Stack_top],4000);
Mode(1);
Stack_top:=Succ(Stack_top)
end;
Frame(Val[num].x1,Val[num].y1,Val[num].x2,Val[num].y2,Val[num].fattr,
Val[num].iattr,Val[num].frm,Val[num].wind,Crt,WinPage);
if val[num].txt > '' then
Title(Val[num].txt,Val[num].cattr,Val[num].tattr,Val[num].x1,
Val[num].y1,Val[num].tt,Winpage);
Window(Val[num].x1+2,Val[num].y1+2,Val[num].x2,Val[num].y2);
Gotoxy(1,1);
textbackground(Val[num].iattr div 16);
textcolor(Val[num].iattr mod 16)
end else
Writeln('Window ',num,' Not Defined.')
end;
Procedure Remove(Num:integer);
begin
if stack_top-num >= 0 then
begin
mode(0);
move(screen[Stack_top-Num],page,4000);
mode(1);
Stack_top:=Stack_top-Num;
Window(Val[STack_top].x1+2,Val[Stack_top].y1+2,Val[Stack_top].x2,Val[Stack_top].y2);
gotoxy(1,1);
textbackground(Val[Stack_top].iattr div 16);
textcolor(Val[Stack_top].iattr mod 16);
if stack_top=0 then begin
normvideo;
window(1,1,80,25);
gotoxy(1,1)
end
end else
Write('Invalid Number, only ',stack_top,' windows active.')
end;
Procedure SelectWindow(Num:integer);
begin
if Num>Stack_top then write('Window ',num,' not activated or defined.')
else begin
Normvideo;
Window(Val[num].x1+2,Val[num].y1+2,Val[num].x2,Val[num].y2);
Gotoxy(1,1);
textbackground(Val[num].iattr div 16);
textcolor(Val[num].iattr mod 16)
end
end;